import store from 'store'

// const apiGate = 'http://nercar.tpddns.cn:2074/' // 1version

const apiGate = 'http://221.5.224.33:10001/'
// const apiGate = 'http://192.168.3.66:10001/'

export function serverUrl() {
  return apiGate;
}

/**
 * 将用户数据存放在以用户_id_开头的item下面
 * @param { string } key key值
 * @param { any } data value值
 */
export function persist(key, data) {
  data = typeof data === 'object' ? JSON.stringify(data) : data
  const userId = JSON.parse(uni.getStorageSync('user') || '{"userId": 0}')
    .userId
  uni.setStorageSync('_' + userId + '_' + key, data)
}

/**
 * 获取用户item下的数据
 * @param { string } key 需要获取的key值
 */
export function getValue(key) {
  const userId = JSON.parse(uni.getStorageSync('user') || '{"userId": 0}')
    .userId
  return uni.getStorageSync('_' + userId + '_' + key)
}

/**
 * 获取登录后的用户信息
 */
export function getStorageUser() {
  // return JSON.parse(uni.getStorageSync('user') || '{"userId": -100}')
}
/**
 * 获取登陆状态
 */
export function gethasLogin() {
  console.debug('登陆状态：', uni.getStorageSync('hasLogin'))
  return uni.getStorageSync('hasLogin') || false
}
/**
 * 获取登录后的用户信息
 */
export function setStorageUserPicture(picture) {
  var user = getStorageUser()
  user.picture = picture
  uni.setStorageSync('user', JSON.stringify(user))
}
/**
 * 获取同步密钥
 */
export function getSymmkey() {
  return uni.getStorageSync(keys.SYMMKEY)
}

/**
 * 保存同步密钥
 */
export function setSymmkey(symmkey) {
  uni.setStorageSync(keys.SYMMKEY, symmkey)
}

/**
 * 用户登录
 * @param { string } name 用户名
 * @param { string } password 密码
 */
export async function login(name, password) {
  const wordArray = cryptoJs.lib.WordArray.random(8)
  const symmkey = cryptoJs.enc.Hex.stringify(wordArray)

  const token = {
    client: 'phone',
    // appkey: !uni.getExtConfigSync() ? plus.push.getClientInfo().appkey || 'appkey' : 'appkey',
    // clientId: !uni.getExtConfigSync() ? plus.push.getClientInfo().clientId || 'clientId' : 'clientId',
    data: rsaEncrypt({
      name,
      password,
      symmkey
    })
  }
  // #ifdef APP-PLUS
  token.appkey = plus.push.getClientInfo().appkey
  token.clientId = plus.push.getClientInfo().clientid
  // #endif
  // #ifdef MP-WEIXIN
  token.appkey = 'appkey'
  token.clientId = 'clientId'
  // #endif
  var result = await loginByToken(token)
  if (result.status === 'success') {
    result.photo = '/file/' + result.name + '/photo/user.file'
    result.password = MD5(password)
    uni.setStorageSync(MD5(name + '_credential'), MD5(password))
    store.commit('setUser', result)
    uni.setStorageSync('user', JSON.stringify(result))
    uni.setStorageSync('token', JSON.stringify(token))
    uni.setStorageSync('hasLogin', true)
    setSymmkey(symmkey)
    store.commit('login', result.userName)
  }
  return result
}

/**
 * post 方式获取服务器端信息,不加密
 * @param { string } url 请求的url地址
 * @param { object } data value值
 * @param { isNotify } string 'no'不自动提示请求结果，默认在屏幕右上角显示服务器请求结果
 */
export async function post(url, data, isNotify, method) {

  // console.log('url, ', url ,data)

  var [error, result] = await
  uni.request({
    method: method ? method : 'POST',
    url: apiGate + url,
    data: data,
	sslVerify: false,
    header: {
      'content-type': 'application/json',
      'userId': getStorageUser() ? getStorageUser().userId : -100
    }
  })
  if (error != null) {
    // console.log('error, ', JSON.stringify(error))
    return error
  }
  
  // console.log('result, ', url, JSON.stringify(result))
  return result.data

}


/**
 * post 方式 加密获取服务器端信息
 * @param { string } url 请求的url地址
 * @param { object } data value值
 * @param { isNotify } string 'no'不自动提示请求结果，默认在屏幕右上角显示服务器请求结果
 */
export async function $post(url, data, isNotify) {
  if (process.server) return
  console.log('url', url)
  const symmkey = getSymmkey()
  const user = getStorageUser()

  if (!user || !symmkey) {
    loginByToken(
      JSON.parse(uni.getStorageSync('token'))
    )
    return
  }

  data = aesEncrypt(data || {})
  const tmp = await post(url, data, isNotify)
  console.debug('tmp, ', tmp, url)
  if (tmp.status === 'sysError' && tmp.code != '500') {
    uni.navigateTo({
      url: 'pages/login/login'
    })
    return
  }
  if (!tmp) return
  return aesDecrypt(tmp.data)
}

/**
 * get 方式 获取服务器端信息,不加密
 * @param { string } url 请求的url地址
 * @param { object } data value值
 * @param { isNotify } string 'no'不自动提示请求结果，默认在屏幕右上角显示服务器请求结果
 */
export async function get(url, data, isNotify) {
  console.debug('请求接口：' + url)
  return await post(url, data || {}, isNotify, 'GET')
}

/**
 * get 方式 加密获取服务器端信息
 * @param { string } url 请求的url地址
 * @param { object } data value值
 * @param { isNotify } string 'no'不自动提示请求结果，默认在屏幕右上角显示服务器请求结果
 */
export async function $get(url, data, isNotify) {
  data = aesEncrypt(data || {})
  const tmp = await this.get(url, data, isNotify, 'GET')
  return aesDecrypt(tmp)
}

/**
 * 获取权限
 */
export function getJurisdiction (routeName) {
  var resources = getStorageUser().resources
  return resources.indexOf(routeName) > -1
}

export function getTime() {
	let year = new Date().getFullYear()
	let month = new Date().getMonth()
	let day = new Date().getDate()
	
	if(day < 10) {
		day = '0' + day
	}
	month = month + 1
	if(month < 10) {
		month = '0' + month
	}
	
	return year + '-' + month + '-' + day
	
}
